const articel = require("../model/article");
const express = require("express");
const router = express.Router();
const user = require("../model/user");
const comment = require("../model/comment");
const log = require("../model/log");
const category = require("../model/category");

(function () {
    articel.find().then(res => {
        var cate = [];
        res.forEach(item => {
            if (cate.indexOf(item.category[0]) == -1) {
                cate.push(item.category[0]);
            }
        })
        cate.forEach(item => {
            category.find({ name: item }).then(cateitem => {
                if (cateitem.length == 0) {
                    category.create({ name: item });
                }
            })
        })
    })
})()


// 发表文章
router.post("/published", (req, res) => {
    var str = req.body.content;
    //匹配图片（g表示匹配所有结果i表示区分大小写）
    var imgReg = /<img.*?(?:>|\/>)/gi;
    // //匹配src属性
    // var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;

    if (str.match(imgReg)) {
        req.body.background = str.match(imgReg)[0];
    }
    category.find({ name: req.body.category }).then(cateitem => {
        if (cateitem.length == 0) {
            category.create({ name: req.body.category });
        }
    })

    articel.create(
        req.body
    ).then(data => {
        res.send({
            code: 1,
            message: "文章发表成功，即将跳转到文章详情页",
            id: data._id
        })
    })
})

// 更新文章
router.post("/mudify/:id", (req, res) => {
    var str = req.body.content;
    //匹配图片（g表示匹配所有结果i表示区分大小写）
    var imgReg = /<img.*?(?:>|\/>)/gi;
    // //匹配src属性
    // var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;

    if (str.match(imgReg)) {
        req.body.background = str.match(imgReg)[0];
    }
    // console.log(req.body);
    articel.updateOne({ _id: req.params.id }, req.body).then(result => {
        if (result.nModified) {
            res.send({
                code: 1,
                message: "文章更新成功，即将跳转到文章详情页",
                id: req.params.id
            })
        } else {
            res.send({
                code: 0,
                message: "文章更新失败，请稍后再试",
                id: req.params.id
            })
        }
    })
})

// 文章详情页
router.get("/info/:id", (req, res) => {
    var obj = {};
    articel.find().count().then((count) => {
        obj.count = count;
        return articel.updateOne({ _id: req.params.id }, { $inc: { views: 1 } })
    }).then(inc => {//更新浏览量
        return articel.findById(req.params.id).populate({ path: "author" })
    }).then(arresult => {//最新的文章
        obj.arresult = arresult;
        return articel.find().sort({ date: -1 }).limit(5)
    }).then(lart => {//最新的日志
        obj.lart = lart;
        return log.find().sort({ date: -1 }).limit(5)
    }).then(logcont => {//查找博主信息
        obj.logcont = logcont;
        return user.findOne({ "userName": "ym深" })
    }).then(admin => {
       obj.admin=admin;
       return category.find();
    }).then(catearray=>{
        if (req.session.ifLogin) {
            user.findOne({ _id: req.session.user._id }).then(result => {//查找用户
                res.render("articel", {
                    iflogin: req.session.ifLogin,
                    user: result,
                    id: req.params.id,
                    articelinfo: obj.arresult,
                    lart: obj.lart,
                    logcont: obj.logcont,
                    admin:obj.admin,
                    count: obj.count,
                    catearray
                });
            })
        } else {
            res.render("articel", {
                iflogin: req.session.ifLogin,
                id: req.params.id,
                articelinfo: obj.arresult,
                lart: obj.lart,
                logcont: obj.logcont,
                admin:obj.admin,
                count: obj.count,
                catearray
            });
        }
    })

})

// 获取评论
router.post("/comment/:id", (req, res) => {
    // comment.find({ articel: req.params.id }).count().then(mount => {//获取评论的总数
    // console.log(req.params.id,req.params.page,mount)
    // console.log("我被触发了");

    // 后端分页，需要刷新整个页面
    // var page = +req.params.page;
    // var climit = 5;
    // var maxpage = mount / climit;
    // var cskip = (page - 1) * climit;
    // page = Math.min(page, maxpage);
    // page = Math.max(1, page);

    //前端分页，通过获取所有评论数据，由前端js来控制这些数据的刷新
    // })

    comment.find({ articel: req.params.id })
        .populate({ path: 'user', select: ['userName', "photo"] })
        .sort({ _id: -1 })
        .then((com) => {//查找评论
            // console.log(com);
            res.send(com)
        })
})

//搜索博文
router.get("/search", (req, res) => {
    var keyword = req.query.keyword;
    var reg = new RegExp(keyword, "g");
    // 因为文章表里作者是关联的数据，所以可以先查询关键字是否是用户名，然后再通过其他方式查找
    user.find({
        $or: [
            { userName: reg }
        ]
    }).then(fuser => {
        if (fuser.length != 0) {//在用户表中查找到了关键字，则可以通过文章的author来查找文章
            articel
                .find({ author: fuser[0]._id })
                .populate({ path: "author" })
                .then(result => {
                    res.send(result)
                })

        } else {//在用户表中没有找到关键字，则通过其他方式查找
            articel.find(
                {
                    $or: [
                        { title: reg },
                        { category: { $regex: reg } }
                    ]
                }

            ).then(result => {
                res.send(result)
            })
        }
    })


})

// 删除博文
router.get("/delete", (req, res) => {
    var keyword = req.query.keyword;
    articel.deleteOne({ _id: keyword }).then(result => {
        if (result.deletedCount) {
            comment.deleteMany({ articel: keyword }).then(com => {
                res.send({
                    code: 1,
                    message: "文章删除成功"
                })
            })
        } else {
            res.send({
                code: 0,
                message: "文章删除失败"
            })
        }
    })
})

// 保存文章
module.exports = router; 